public class Main {
    public static void main(String[] args) {

        //System.out.println("Hello world!");
        //
        //数组：可以看作是相同类型元素的集合——在内存中是连续的

        //第一种定义数组的方式
        //a是整形变量
        //int a=10;
        //类型是int,整形

        //array是数组变量
        //int [] array1={1,2,3,4,5};
        //类型是 int[],整型数组类型，

        //下标和索引，是同一个东西，
        //int [] array2 = new int [10];//定义了一个大小为10的整型数组
        //Java初始化是全0——默认初始化全0

        //不完全初始化，一旦你赋值，前面不能有数字，Java不允许你有
        //惊讶的发现存储的是地址

        int [] array3 = new int []{1,2,3,4,5,6,7};
        //System.out.println(array1);
        //System.out.println(array2);
//        System.out.println(array3[0]);
//        System.out.println(array3[1]);
//        System.out.println(array3[2]);
//        System.out.println(array3[3]);
//        System.out.println(array3.length);//数组的长度，
        for (int i = 0; i < array3.length; i++) {
            System.out.println(array3[i]+" ");
        }
        //for each 循环，增强for循环
        //核心循环是——foreach循环拿不到下标，
        //场景：想让第三个元素，扩大2倍
        //
        //对下标的依赖——for和foreach的区别
        for (int x: array3) {
            System.out.print(x+" ");
        }
        System.out.println();

        //可以理解为地址，但是堆上的也不是真正的地址，虽然他是唯一的，哈希，对应的，——太安全了
        //[I@1b6d3586
        //存储地址的变量叫做引用变量——其实就是引用
        //数组就是引用

        //虽然省去了，但是编译器编译的时候，还是会还原
        //
        int []array4;
        array4=new int[]{1,2,3,4,5,6,7,8,9,10};
        //你要是不写new的话，就只能
        //其实就相当于语法简化，
        //本质上是一样的

        //如果不给数组初始化，是有默认值的
        //int _0
        //char_0
        //double_0.0
        //boolean_false
        //float_0.0f
        //String_null

        //使用数组一定要谨防下标越界,java一定会告诉你

        //算数异常——分母为0
        //数组越界异常，数组下标越界
        //

        char []array5 = new char[10];
        double []array6 = new double [10];
        String []strings = new String[20];
    }
}

//for each——语法糖，